package com.yuhl.lambda;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @author yuhl
 * @Date 2021/6/27 19:38
 * @Classname LambdaDemo3
 * @Description lambda表达式的总结
 *
 * 语法格式1：无参数，无返回值，lambda体只有一条语句
 * Runnable runable = () -> {System.Out.println("Hello")}
 *
 * 语法格式2：一个参数，无返回值 Consumer.java就是这种接口
 * Consumer consumer = (i) -> {System.Out.println("consumer hello")}
 *
 * 语法格式3：一个参数，无返回值 Consumer.java就是这种接口 仅一个参数时，可以省略之
 * Consumer consumer = i -> {System.Out.println("consumer hello")}
 *
 * 语法格式4：两个参数，有返回值 Comparator.java就是这种类型
 *  Comparator comparetor = (x, y) -> {
 *      System.Out.println("哈哈 ");
 *      return Integer.compare(x, y)
 *  }
 *
 * 语法格式5： lambda体仅有一条语句是，大括号和return可以省略
 *  Comparator comparetor = (x, y) ->  Integer.compare(x, y)；
 *
 * 语法格式6：数据类型可以省略，jvm可以"类型推断"
 * Comparator comparetor = (Integer x, Integer y) ->  Integer.compare(x, y)；
 *
 * 总结：能省则省！
 */
public class LambdaDemo3 {

    //语法格式1：无参数，无返回值，lambda体只有一条语句
    Runnable runable = () -> System.out.println("Hello");

    //语法格式2：一个参数，无返回值 Consumer.java就是这种接口
    Consumer consumer = (x) -> System.out.println("hello" + x);

    //语法格式3：一个参数，无返回值 Consumer.java就是这种接口 仅一个参数时，可以省略之
    Consumer consumer2 = x -> System.out.println("hello" + x);

    //语法格式4：两个参数，有返回值 Comparator.java就是这种类型
    Comparator<Integer> comparator = (x, y) -> {
        System.out.println("hello");
        return Integer.compare(x, y);
    };

    //语法格式5： lambda体仅有一条语句是，大括号和return可以省略
    Comparator<Integer> comparator2 = (x, y) ->  Integer.compare(x, y);

    //语法格式6：数据类型可以省略，jvm可以"类型推断"
    Comparator<Integer> comparator3 = (Integer x, Integer y) ->  Integer.compare(x, y);
    Comparator<Integer> comparator4 = (x, y) ->  Integer.compare(x, y);
}
